#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//int Is_Triangle(int a, int b, int c)
//{
//	if (a + b > c)
//	{
//		if (a == b && b == c)
//		{
//			return 1;
//		}
//		else if (a == b || a == c || b == c)
//		{
//			return 2;
//		}
//		else
//		{
//			return 3;
//		}
//
//	}
//	else
//	{
//		return 0;
//	}
//
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	int ret = 0;
//	while (scanf("%d %d %d", &a, &b, &c) != EOF)
//	{
//		ret = Is_Triangle(a, b, c);
//		if (ret == 1)
//		{
//			printf("Equilateral triangle!\n");
//		}
//		if (ret == 2)
//		{
//			printf("Isosceles triangle!\n");
//		}
//		if (ret == 3)
//		{
//			printf("Ordinary triangle!\n");
//		}
//		if (ret == 0)
//		{
//			printf("Not a triangle!\n");
//		}
//	}
//
//
//
//	return 0;
//}


//int main()
//{
//	int arr1[10] = { 0 };
//	int arr2[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr1[i]);
//	}
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr2[i]);
//	}
//	for (i = 0; i < 10; i++)
//	{
//		int temp = arr1[i];
//		arr1[i] = arr2[i];
//		arr2[i] = temp;
//	}
//
//
//	return 0;
//}


//void Init(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		arr[i] = 0;
//	}
//}
//void print(int arr[],int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//void reverse(int arr[], int sz)
//{
//	int left = 0;
//	int right = sz - 1;
//	while (left < right)
//	{
//		int temp = arr[left];
//		arr[left] = arr[right];
//		arr[right] = temp;
//		right--;
//		left++;
//	}
//}
//int main()
//{
//
//	int arr1[10] = {0};
//	int sz = sizeof(arr1) / sizeof(arr1[0]);
//	Init(arr1, sz);
//	print(arr1,sz);
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		scanf("%d", &arr1[i]);
//	}
//	reverse(arr1,sz);
//	print(arr1, sz);
//
//
//	return 0;
//}

//char* reverse_str(char* arr)
//{
//	int len = strlen(arr);
//	char temp = *arr;
//	*arr = *(arr + len - 1);
//	*(arr + len - 1) = '\0';
//	if(strlen(arr+1) > 2)
//		reverse_str(arr + 1);
//	*(arr + len - 1) = temp;
//
//}
//int main()
//{
//	char arr[] = "abcdef";
//	reverse_str(arr);
//	printf("%s\n", arr);
//	return 0;
//}

//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	int flag = 1;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int j = 0; 
//		flag = 1;
//		for (j = 0; j < sz - i - 1; j++)
//		{
//			
//			if (arr[j] > arr[j + 1])
//			{
//				int temp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = temp;
//				flag = 0;
//			}
//			
//		}
//		if (flag == 1)
//		{
//			break;
//		}
//	}
//}
//
//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	int sz = sizeof(arr)/sizeof(arr[0]);
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//
//	bubble_sort(arr,sz);
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ",arr[i]);
//	}
//	return 0;
//}


//int main()
//{
//	int arr[5] = { 0 };
//	int i = 0;
//	int key = 0;
//	for (i = 0; i < 5; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	scanf("%d", &key);
//	int j = 0;
//	for (i = 0; i < 5; i++)
//	{
//		if (arr[i] != key)
//		{
//			arr[j++] = arr[i];
//		}
//	}
//}

//#include<string.h>
//int main()
//{
//	char ch = 0;
//	while ((ch = getchar()) != EOF)
//	{
//		if (islower(ch))
//		{
//			printf("%c\n", toupper(ch));
//		}
//		else
//		{
//			printf("%c\n", tolower(ch));
//		}
//	}
//
//
//
//	return 0;
//}

//int main()
//{
//	int i = 0;
//	int j = 0;
//	int sum = 0;
//	for (i = 10000; i < 100000; i++)
//	{
//		sum = 0;
//		for (j = 10; j < 10000; j *= 10)
//		{
//			sum += (i / j) * (i % j);
//		}
//		if (sum == i)
//		{
//			printf("%d", i);
//		}
//	}
//	return 0;
//}

//int calc_dif_bit(int m, int n)
//{
//	int x = m ^ n;
//	int count = 0;
//	while (x)
//	{
//		x = x & (x - 1);
//		count++;
//	}
//
//	return count;
//
//}
//int main()
//{
//	int m = 0;
//	int n = 0;
//
//	scanf("%d %d", &m, &n);
//
//	printf("%d", calc_dif_bit(m, n));
//
//}

//void print_bit(int m)
//{
//	int i = 0;
//	for (i = 31; i >= 1; i-=2)
//	{
//		printf("%d",(m>>i)&1);
//	}
//	for (i = 30; i >= 1; i -= 2)
//	{
//		printf("%d", (m >> i) & 1);
//	}
//	printf("\n");
//}
//int main()
//{
//	int m = 0;
//	scanf("%d", &m);
//
//	print_bit(m);
//
//	return 0;
//}


//int main()
//{
//	int m = 0;
//
//	scanf("%d", &m);
//	int i = 0;
//	int count = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (((m >> i) & 1) == 1)
//		{
//			count++;
//		}
//	}
//
//	return 0;
//}

//int main()
//{
//	int a = 10;
//	int b = 20;
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//
//	return 0;
//}

//int main()
//{
//	int i = 0;
//	int j = 0;
//	int n = 0;
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			if (i == j)
//			{
//				printf("*");
//			}
//			else if ((j + i) == n - 1)
//			{
//				printf("*");
//			}
//			else
//			{
//				printf(" ");
//			}
//		}
//		printf("\n");
//	}
//
//	return 0;
//}
int is_leap_year(int year) {
    if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
        return 1;
    }
    else {
        return 0;
    }

}
int is_mouth(int mouth, int ret) {
    if (ret == 1) {
        int arr1[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        return arr1[mouth];
    }
    else {
        int arr2[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        return arr2[mouth];
    }


}
int main() {
    int year = 0;
    int mouth = 0;
    while (scanf("%d %d", &year, &mouth) != EOF) {
        int ret = is_leap_year(year);
        if (ret) {
            printf("%d\n", is_mouth(mouth, ret));
        }
        else {
            printf("%d\n", is_mouth(mouth, ret));
        }
    }


}